/**
 * 将任意类型转换成字符串，
 * 如果配置toString()函数则直接调用，
 * 若无toString()则相当于Object.property.toString.call(val)
 * @param val 任意类型
 */
export function commonToString(val: unknown): string {
  return String(val);
}
/**
 * 对象转换string，
 * 调用[Symbol.toStringTag]
 * @param val 任意类型
 */
export function objectToString(val: unknown): string {
  return Object.prototype.toString.call(val);
}
/**
 * 拼凑对象类型
 * objectToString转换后的对象
 * @param s tag字符串
 */
export function objectToStringFormat(s: string): string {
  return `[object ${s}]`;
}
/**
 * 格式化对象toString
 * @param className
 * @param fields
 */
export function formatToString(
  className: string,
  ...fields: [string, unknown][]
): string {
  let s = `${className}:`;
  for (const [name, prop] of fields) s += `${name}=${commonToString(prop)},`;
  return s.substr(0, s.length - 1);
}
